All files / core/snap/indexes ValueIndex.ts

88.89% Statements 24/27
100% Branches 2/2
62.5% Functions 5/8
88% Lines 22/25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87                                12x 12x 12x 12x             12x       12x 102x 102x 30x   72x             12x 4x           12x             12x             12x                 12x 2x 2x           12x 65x   12x   12x  
/**
 * Copyright 2017 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
import { Index } from './Index';
import { NamedNode, Node } from '../Node';
import { nameCompare } from '../../util/util';
import { nodeFromJSON } from '../nodeFromJSON';
 
/**
 * @constructor
 * @extends {Index}
 * @private
 */
export class ValueIndex extends Index {
  /**
   * @inheritDoc
   */
  compare(a: NamedNode, b: NamedNode): number {
    const indexCmp = a.node.compareTo(b.node);
    if (indexCmp === 0) {
      return nameCompare(a.name, b.name);
    } else {
      return indexCmp;
    }
  }
 
  /**
   * @inheritDoc
   */
  isDefinedOn(node: Node): boolean {
    return true;
  }
 
  /**
   * @inheritDoc
   */
  indexedValueChanged(oldNode: Node, newNode: Node): boolean {
    return !oldNode.equals(newNode);
  }
 
  /**
   * @inheritDoc
   */
  minPost(): NamedNode {
    return (NamedNode as any).MIN;
  }
 
  /**
   * @inheritDoc
   */
  maxPost(): NamedNode {
    return (NamedNode as any).MAX;
  }
 
  /**
   * @param {*} indexValue
   * @param {string} name
   * @return {!NamedNode}
   */
  makePost(indexValue: object, name: string): NamedNode {
    const valueNode = nodeFromJSON(indexValue);
    return new NamedNode(name, valueNode);
  }
 
  /**
   * @return {!string} String representation for inclusion in a query spec
   */
  toString(): string {
    return '.value';
  }
}
 
export const VALUE_INDEX = new ValueIndex();